/**
 * 学习属性的封装
 * get ,set 
 * public private static
 */
(function () {
  class Person {
    // 在属性前面,添加修饰符
    /**
     * public: 公共的,可以给其他人用(默认的)
     * static:静态的,直接通过类使用
     * private:私有属性,只能在类内部访问和修改
     *        可以在类中添加方法,使得私有属性可以被外部访问
     */
    _name: String;
    private _age: number;
    constructor(name: string, age: number) {
      this._name = name;
      this._age = age;
    }
    // 定义一个方法,用来读取私有值
    getAge() {
      return this._age;
    }
    // 定义一个方法,修改私有值 
    setAge(value: number) {
      if (value > 0) {
        this._age = value;
      } else {
        console.log("年龄不能小于0")
      }
    }
    // 直接使用get,就可以直接读取到了数据
    /**
     * 好处是直接就可以用, 用关键字.就可以了
     */
    get age() {
      return this._age;
    }
    set age(value) {
      this._age = value;
    }
  }
  const p = new Person('Rosingsun', 12);
  /**
   * 属性直接在对象中设置,
   * 属性可以任意被修改,将会导致数据变的非常不安全
   */
  console.log(p._name);
  console.log(p.age);
  console.log(p.getAge());
  p.setAge(93)
  console.log(p.getAge());
  p.age = 23
  console.log(p.age);


})();